// 权限验证
import { router, addRoutes } from './router'
import { getToken } from '~/composables/auth'
import { toast, showFullLoading, hideFullLoading } from '~/composables/util'
import store from './store'

/**
 * 全局前置守卫
 * ***/
let hasGetInfo = false
router.beforeEach(async (to, from, next) => {
  // 显示loading
  showFullLoading()

  // 拿取token
  const token = getToken()

  // 判断有没有token登录没有,没有登录, 强制跳转回登录页面
  if (!token && to.path !== '/login') {
    toast('请先登录', 'error')
    return next({ path: '/login' })
  }

  // 防止重复登录
  if (token && to.path === '/login') {
    toast('你以登录,请勿重复登录', 'error')
    return next({ path: from.path ? from.path : '/' })
  }

  // 如果用户登录了,自动获取用户信息, 并储存在vuex当中
  let hasNewRoutes = false
  if (token && !hasGetInfo) {
    const { menus } = await store.dispatch('getInfo')
    hasGetInfo = true
    // 动态添加路由
    hasNewRoutes = addRoutes(menus)
  }

  // 设置页面标题
  const title = (to.meta.title ? to.meta.title : ' ') + ' | 九离商城后台'
  document.title = title

  hasNewRoutes ? next(to.fullPath) : next()
})

/**
 * 全局后置守卫
 * **/
router.afterEach((to, from) => hideFullLoading())
